// utils/websocket.js

let socket = null;

// 从环境变量读取 WebSocket 地址，适配多环境
// 优先级：环境变量 > 域名映射 > 当前域名
const getWebSocketHost = () => {
  // 1. 优先使用环境变量配置
  if (import.meta.env.VITE_WS_HOST) {
    console.log('🔧 使用环境变量WebSocket地址:', import.meta.env.VITE_WS_HOST);
    return import.meta.env.VITE_WS_HOST;
  }
  
  // 2. 根据当前域名自动映射WebSocket地址
  const currentHost = window.location.host;
  const domainMapping = {
    // 生产环境域名映射
    'your-prod-domain.com': '118.196.25.232:8921',
    'prod.yourdomain.com': '118.196.25.232:8921',
    
    // 预发布环境域名映射
    'staging.yourdomain.com': 'staging-ws.yourdomain.com:8921',
    'test.yourdomain.com': 'test-ws.yourdomain.com:8921',
    
    // 开发环境域名映射
    'localhost:3000': '192.168.110.109:8921',
    'localhost:5173': '192.168.110.109:8921',
    '127.0.0.1:3000': '192.168.110.109:8921',
    '127.0.0.1:5173': '192.168.110.109:8921'
  };
  
  if (domainMapping[currentHost]) {
    console.log('🔧 使用域名映射WebSocket地址:', domainMapping[currentHost]);
    return domainMapping[currentHost];
  }
  
  // 3. 如果有API基础地址，从中提取host
  if (import.meta.env.VITE_APP_BASE_API) {
    const baseApi = import.meta.env.VITE_APP_BASE_API;
    // 如果是完整URL，提取host部分
    if (baseApi.startsWith('http')) {
      const url = new URL(baseApi);
      const apiHost = url.host;
      console.log('🔧 从API地址提取WebSocket地址:', apiHost);
      return apiHost;
    }
  }
  
  // 4. 默认使用当前页面的域名（适用于同域部署）
  console.log('🔧 使用当前域名作为WebSocket地址:', currentHost);
  return currentHost;
};

const WS_HOST = getWebSocketHost();

// 从 Cookie 里获取指定名称的值
function getCookie(name) {
  const match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));
  return match ? decodeURIComponent(match[2]) : null;
}

export function connectWebSocket(userId, onMessageCallback) {
  if (!userId) {
    console.warn('用户 ID 为空，无法建立 WebSocket 连接');
    return;
  }

  // 从 Cookie 获取 token，假设你的 token 保存在名为 "Admin-Token" 的 Cookie 中
  const token = getCookie('Admin-Token');
  if (!token) {
    console.warn('Cookie 中找不到 token，无法建立 WebSocket 连接');
    return;
  }

  // 自动识别协议，http对应ws，https对应wss
  const protocol = window.location.protocol === 'https:' ? 'wss' : 'ws';

  // 将 token 和 userId 通过 URL 参数传递，后端可从 URL 解析 token
  const wsUrl = `${protocol}://${WS_HOST}/ws/notice?token=${encodeURIComponent(token)}&userId=${userId}`;

  socket = new WebSocket(wsUrl);

  socket.onopen = () => {
    console.log('✅ WebSocket 连接成功');
  };

  socket.onmessage = (event) => {
    console.log('📩 收到消息:', event.data);
    if (onMessageCallback) {
      onMessageCallback(event.data);
    }
  };

  socket.onclose = () => {
    console.log('🔌 WebSocket 连接关闭');
  };

  socket.onerror = (error) => {
    console.error('❌ WebSocket 错误:', error);
  };
}

export function sendWebSocketMessage(message) {
  if (socket && socket.readyState === WebSocket.OPEN) {
    socket.send(message);
  } else {
    console.warn('WebSocket 未连接，无法发送');
  }
}
